﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Runtime.Remoting.Metadata.W3cXsd2001;
using System.Text;
using System.Threading.Tasks;

namespace Lesson9_拓展封装方法
{
    //为现有非静态类 变量类型添加新方法
    #region  基本语法 
    //访问修饰符 static 返回值 函数名 （this 拓展类名 参数名 ，参数类型 参数名 ...)
    #endregion
    #region  拓展方法的使用
    //作用 ：1 ：提高程序拓展性
    //       2 ：不需要在对象中使用新方法 
    //       3 ；不需要继承添加新方法
    //       4 ：为别人封装的类型写新的方法
    //注意：封装方法的固定格式要写对
    #endregion
    static class Tools
    {
        public static void SpeakValue(this int value)
        {
            Console.WriteLine("唐老师为int拓展的新方法" + value);
        }
        public static void SpeakSpringValue(this string str, string str2, string str3)
        {
            Console.WriteLine("唐老师为string拓展的方法");
            Console.WriteLine("唐老师调用方法的对象" + str);
            Console.WriteLine("传的参数" + str2 + str3);
        }
        public static void Fun3(this Text t)
        {
            Console.WriteLine("为text拓展的新的方法");
        }
        public static void Stop(this Study sdy)   //sdy用户最定义函数参数
        {
            Console.WriteLine("为Study拓展的方法");
        }
    }


    #region 为用户自定义的类型拓展方法
    class Text
    {
        public void Fun1()
        {
            Console.WriteLine("123");
        }

        public void Fun2()
        {

            Console.WriteLine("456");
        }
    }
    #endregion
    class Study
    {
        public void Fib1()

        {
            Console.WriteLine("递归调用");
        }
        public void Fib2()
        {
            Console.WriteLine("结构体");
        }


        internal class Program
        {

            static void Main(string[] args)
            {
                int i = 10;
                i.SpeakValue();

                string str = "000";
                str.SpeakSpringValue("111", "唐老师");
                Text t = new Text();
                t.Fun3();
                Study sdy = new Study();
                sdy.Stop();
            }
        }
    }
}
